package cn.wolfcode.luowowo.member.service;

import cn.wolfcode.luowowo.common.customexception.UserInfoException;
import cn.wolfcode.luowowo.common.domain.AjaxResult;
import cn.wolfcode.luowowo.member.domain.UserInfo;

import java.math.BigDecimal;
import java.util.List;

public interface IUserInfoService {

    /**
     * 检查手机号唯一性的方法
     *
     * @param phone 手机号
     * @return true:唯一 false:已注册
     */
    boolean checkPhone(String phone);

    /**
     * 发送验证码
     * @param phone
     * @return  操作结果
     */
    void sendVerifyCode(String phone) throws UserInfoException;

    /**
     * 用户注册
     * @param phone 手机号 账号
     * @param nickname  昵称
     * @param password  密码
     * @param rpassword   二次密码
     * @param verifyCode    验证码
     */
    void userRegist(String phone, String nickname, String password, String rpassword, String verifyCode) throws UserInfoException;

    /**
     * 用户登录
     * @param username  用户名即手机
     * @param password  密码
     * @return
     */
    String userLogin(String username, String password) throws UserInfoException;

    /**
     * 查询所有用户信息
     * @return
     */
    List<UserInfo> list();

    /**
     * 根据用户id查询用户对象
     * @param id
     * @return
     */
    UserInfo get(Long id);

    /**
     * 根据用户id查询粉丝
     * @param uid
     * @return
     */
    String queryFansByUid(Long uid);

    /**
     * 根据用户id查询关注数
     * @param uid
     * @return
     */
    String queryFollwersByUid(Long uid);

    /**
     * 根据用户id查询蜂蜜
     * @param id
     * @return
     */
    Integer selectHoney(Long id);

    /**
     * 更新用户头像
     * @param uid   用户id
     * @param pic   上存的图片
     */
    void  updateHeadImgUrl(Long uid,String pic);


    /**
     * 设置页面更新的数据
     * @param userInfo
     */
    void updateUserInfo(UserInfo userInfo);


    /**
     * 根据手机号更改密码
     * @param password
     * @param rpassword1
     * @param smscode
     * @param phone
     * @return
     */
    AjaxResult updatepassword(String password,String rpassword1,String rpassword2,String smscode,String phone);


    /**
     * 更新邮箱
     * @param email
     * @param id
     */
    void updateEmailById(String email, Long id);


    /**
     * 更新注销为状态
     * @param state
     * @param id
     */
    void updateStateById(int state, Long id);

    /**
     * 更改手机
     * @param phone
     * @param id
     */
    void updatePhoneById(String phone, Long id);

    /**
     * 获取单个用户信息
     * @param uid
     * @return
     */
    UserInfo selectUserById(Long uid);


    /**
     * 发送更改密码短信
     * @param phone
     */
    void sendrpwVerifyCode(String phone);

    /**
     * 将用户金币余额减少
     * @param id
     * @param score
     */
    void updateScore(Long id, BigDecimal score);


}
